CC = g++
BUILDFLAG = TEST_FINAL 	# TEST_CODEGEN / TEST_3ADDR / TEST_AST / TEST_OPTIMIZER / TEST_TYPE / TEST_EVENTMAT
CFLAGS = -c -g -O -Wno-deprecated -D$(BUILDFLAG)  
FLEX = flex
BISON = bison

demo:	driver.o E--_lexer.o E--_parser.o E--.tab.h Ast.o STEClasses.o SymTabMgr.o Value.o Type.o SymTabEntry.o Error.o ParserUtil.o SymTab.o nSTEClasses.o nAst.o Imm.o Optimizer.o AbsMachCode.o EventMatcher.o
	$(CC) -o demo E--_lexer.o E--_parser.o driver.o Ast.o STEClasses.o SymTabMgr.o Value.o Type.o SymTabEntry.o Error.o ParserUtil.o SymTab.o nSTEClasses.o nAst.o Imm.o Optimizer.o AbsMachCode.o EventMatcher.o -lfl

E--_lexer.o:	E--_lexer.C E--.tab.h
	$(CC) $(CFLAGS) E--_lexer.C

E--_lexer.C:	E--_lexer.l++ E--_parser.C
	$(FLEX) -p -8 -Ce -oE--_lexer.C E--_lexer.l++

E--_parser.o: E--_parser.C E--.tab.h
	$(CC) $(CFLAGS) E--_parser.C

E--_parser.C: E--_parser.y++
	$(BISON) -t -d -v -o E--_parser.C E--_parser.y++; \
    mv E--_parser.H E--.tab.h

SymTabMgr.o: SymTabMgr.h SymTabMgr.C
	$(CC) $(CFLAGS) SymTabMgr.C

SymTabEntry.o: SymTabEntry.h SymTabEntry.C
	$(CC) $(CFLAGS) SymTabEntry.C

STEClasses.o: STEClasses.h STEClasses.C Imm.h AbsMachCode.C AbsMachCode.h
	$(CC) $(CFLAGS) STEClasses.C

Ast.o: Ast.h Ast.C Imm.h AbsMachCode.C AbsMachCode.h
	$(CC) $(CFLAGS) Ast.C

Optimizer.o: Optimizer.h Optimizer.C Imm.h AbsMachCode.C AbsMachCode.h
	$(CC) $(CFLAGS) Optimizer.C

Imm.o: Imm.h Imm.C AbsMachCode.C AbsMachCode.h
	$(CC) $(CFLAGS) Imm.C


AbsMachCode.o: AbsMachCode.h AbsMachCode.C
	$(CC) $(CFLAGS) AbsMachCode.C

nSTEClasses.o: STEClasses.h nSTEClasses.C  AbsMachCode.C AbsMachCode.h
	$(CC) $(CFLAGS) nSTEClasses.C

nAst.o: Ast.h nAst.C
	$(CC) $(CFLAGS) nAst.C

Value.o: Value.h Value.C
	$(CC) $(CFLAGS) Value.C

Type.o: Type.h Type.C
	$(CC) $(CFLAGS) Type.C

Error.o: Error.h Error.C
	$(CC) $(CFLAGS) Error.C

ParserUtil.o: ParserUtil.h ParserUtil.C
	$(CC) $(CFLAGS) ParserUtil.C

SymTab.o: SymTab.h SymTab.C
	$(CC) $(CFLAGS) SymTab.C

EventMatcher.o: EventMatcher.h EventMatcher.C
	$(CC) $(CFLAGS) EventMatcher.C

driver.o: driver.C Imm.h
	$(CC) $(CFLAGS) driver.C

clean:
	-echo "Removing all object files!"
	-rm -f demo *.o
	-echo "Removing intermediate files!"
	-rm -f E--_parser.C
	-rm -f E--_lexer.C
	-rm -f E--_parser.output
